
//leetcode submit region begin(Prohibit modification and deletion)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 * int val;
 * ListNode next;
 * ListNode() {}
 * ListNode(int val) { this.val = val; }
 * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    /**
     * 第一遍
     * @param head
     * @return
     */
//    public ListNode deleteDuplicates(ListNode head) {
//        ListNode dummy = new ListNode(-1);
//        ListNode p = dummy;
//        while (head != null) {
//            if (head.next == null || head.val != head.next.val) {
//                // 因为不存在相同的节点，所以直接放新链表中；
//                //  表示将当前节点放入新链表中；
//                p.next = head;
//                // 表示将指针p移动到当前节点，以便下一次操作。因为下次还需要将新节点放新链表
//                p = head;
//            }
//
//            while (head.next != null && head.val == head.next.val) {
//                // 存在相同的节点，则跳过
//                head = head.next;
//            }
//            head = head.next;
//        }
//        // 最后的节点指向怒null
//        p.next = null;
//        return dummy.next;
//    }


    /**
     * 第二遍 2/27
     * @param head
     * @return
     */
//    public ListNode deleteDuplicates(ListNode head) {
//        ListNode dummy = new ListNode(-1);
//        ListNode p = dummy;
//
//        while (head != null) {
//            if (head.next == null || head.val != head.next.val) {
//                p.next = head;
//                p = head;
//            }
//
//            while (head.next != null && head.val == head.next.val) {
//                head = head.next;
//            }
//            head = head.next;
//        }
//
//        // 最后的节点指向null
//        p.next = null;
//        return dummy.next;
//    }


    /**
     * 第三遍 3/1
     * @param head
     * @return
     */
    public ListNode deleteDuplicates(ListNode head) {
        ListNode dummy = new ListNode(-1);
        ListNode p = dummy;

        while (head != null) {
            if (head.next == null || head.val != head.next.val) {
                p.next = head;
                p = head;
            }

            while (head.next != null && head.val == head.next.val) {
                head = head.next;
            }
            head = head.next;
        }
        // 最后将尾节点置为null
        p.next = head;
        return dummy.next;
    }
}
//leetcode submit region end(Prohibit modification and deletion)
